package com.edu.util;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

import com.edu.exception.FileException;

/**
 * 扩充FilenameUtils类
 * @author zhu
 *
 */
public class ZFilenameUtils extends FilenameUtils{

	/**
	 * 将文件路径转换为相对路径
	 * 	如果文件是以/开头，将/去掉
	 * @param path
	 * @return
	 */
	public static String convertToRelativePath(String path) {
		String normalizePath = FilenameUtils.normalize(path);
		//如果path以分隔符开头,将分隔符去除
		String relativePath = StringUtils.removeStart(normalizePath,  File.separator);
		return relativePath;
	}
	
	public static String getSystemType() {
		Properties prop = System.getProperties();
		return prop.getProperty("os.name");
	}
	  /**
	   * 获取上一级目录
	   * 1. dir如果是根目录则不做任何操作
	   * 2. dir如果是二级目录则返回根目录
	   * @param dir 当前目录
	   * @return String 父目录
	   * 如:
	   * 传入文件名为“ABC/123”的目录
	   * 返回 ABC
	   * *
	   */
	  public static String getParentDir(String dir) {
	    dir = FilenameUtils.normalize(dir);
	    System.out.println(dir);
	    if (dir.contains("\\")) {
	      String parent = dir.substring(0,dir.lastIndexOf("\\"));
	      return parent;
	    } else {
	      return "";
	    }
	  }
	

	/**
	 * 验证文件或者目录名合法性
	 * 
	 * @param fileName
	 * @return
	 */
	public static boolean isValidDocName(String name) {
			String re = "^([^\\\\\\?\\/\\*\\|<>:\"]+/)*([^\\\\\\?\\/\\*\\|<>:\"])*\\.\\w+$";
			return name.matches(re);	
	}
	
	public static boolean isValidDirName(String name) {
		String re = "^([^\\\\\\?\\/\\*\\|<>:\"]+/)*([^\\\\\\?\\/\\*\\|<>:\"])+$";
		return name.matches(re);	
}

	/**
	 * 确定父目录是否包含子元素(文件或目录)。
	 * 
	 * @param fileName
	 * @return
	 * @throws IOException 
	 * @throws FileException 
	 */
	public static boolean isRepeatName(String dir) throws IOException {
		
		File file = new File(dir);
		File parentFile = file.getParentFile();
		String[] files = parentFile.list();
		if(ArrayUtils.isEmpty(files)) return false;
		List<String> fileList = Arrays.asList(files);
		return fileList.contains(file.getName());	 
	 }
	
 
}
